import axios from 'axios'
// import Qs from 'qs'
import router from '@/router/index'
import store from '@/store/index'
import { Message } from 'element-ui'  // 弹窗提示

const toLogin = () => {
    router.push({
        path: '/login',
        query: {
            redirect: router.currentRoute.fullPath
        }
    })
}

const api = axios.create({ // 实例化一个axios对象赋到api的常量上，再去main.js里去import一下
    baseURL: process.env.VUE_APP_API_ROOT,
    timeout: 10000
    // withCredentials: true 和后端配合写的跨域配置
})

api.interceptors.request.use(  // 请求的拦截器
    config => {
        // 如果存在token，请求携带这个token
        if (localStorage.getItem('token')) {
            config.headers['Authorization'] = localStorage.getItem('token')
        }
        return config
        // if (request.method === 'post') {
        //     if (request.data instanceof FormData) {
        //         if (store.getters['user/isLogin']) {
        //             // 如果是 FormData 类型（上传图片）
        //             request.data.append('token', store.state.user.token)
        //         }
        //     } else {
        //         // 带上 token
        //         if (request.data === undefined) {
        //             request.data = {}
        //         }
        //         if (store.getters['user/isLogin']) {
        //             request.data.token = store.state.user.token
        //         }
        //         // request.data = Qs.stringify(request.data)
        //     }
        // } else {
        //     // 带上 token
        //     if (request.params === undefined) {
        //         request.params = {}
        //     }
        //     if (store.getters['user/isLogin']) {
        //         request.params.token = store.state.user.token
        //     }
        // }
        // return request
    },
    error =>  {
        console.log(error)
    }
)

api.interceptors.response.use( // 响应的拦截器。遇到请求失败或相应失败时，进行统一的处理
    success => { // 成功调到后端的接口
        // 业务逻辑错误
        if (success.status && success.status === 200) {
            if (success.data.code === 500 || success.data.code === 403 || success.data.code === 404) { // 后端返回对象的code
                Message.error({message: success.data.message})
                return
            }
            if (success.data.code === 401) {
                Message.error({message: success.data.message})
                store.dispatch('user/logout')
                setTimeout(() => {
                    router.push({path: '/login'})
                }, 200)
            }
        }
        return success
    },
    error => { // 连接口都访问失败了
        if (error.response.code === 504 || error.response.code === 404) {
            Message.error({message: '服务器被吃了！'})
        } else if (error.response.code === 403) {
            Message.error({message: '权限不足，请联系管理员！'})
        } else if (error.response.code === 401) {
            Message.error({message: '身份认证过期，请重新登录'})
            this.$router.replace('/login')
        } else {
            if (error.response.data.message) { // 如果有响应信息
                Message.error({message: error.response.data.message})
            }  else {
                Message.error({message: '未知错误！'}) // 如果连响应信息都没有
            }
        }
        return
    })

export default api

let base = ''

// 传送json格式的post请求
export const postRequest = (url, params) => {
    return api ({
        method: 'post',
        url: `${base}${url}`,
        data: params
    })
}

// 传送JSON的put请求
export const putRequest = (url, params) => {
    return api ({
        method: 'put',
        url: `${base}${url}`,
        data: params
    })

}

// 重新定义put请求方式 @RequestParam  对应params
export const putEditStatusRequest = (url, params) => {
    return api ({
        method: 'put',
        url: `${base}${url}`,
        params: params
    })

}

// 传送JSON的get请求
export const getRequest = (url, params) => {
    return api ({
        method: 'get',
        url: `${base}${url}`,
        params: params
    })
}

// 传送JSON的delete请求
export const deleteRequest = (url, params) => {
    return api ({
        method: 'delete',
        url: `${base}${url}` + '/' + params
    })

}

// 自定义删除部门方法
export const deleteDeptRequest = url => {
    return api ({
        method: 'delete',
        url: `${base}${url}`
    })

}

export const selectUserInfo = token => {
    return api ({
        method: 'get',
        url: `${base}` + 'userCenter/accountInfo',
        headers: {
            'Authorization': token
        }
    })
}

export const getMenus = token => {
    return api ({
        method: 'get',
        url: `${base}` + '/system/menu/getMenu',
        headers: {
            'Authorization': token
        }
    })
}
